#include <iostream>

class A {
friend void CopyA();
private:
    A(const A&);
    A& operator=(const A&);

public:
    A() = default;
};

void CopyA()
{
    // A a, a1;
    // A a2(a);
    // a = a1;
}

class B {
public:
    B(const B&) = delete;
    B& operator=(const B&) = delete;

    B() = default;
};

bool isLucky(int num) {
    //todo...
    return true;
}

bool isLucky(char) = delete;
bool isLucky(bool) = delete;

template<typename T>
void ProcessPointer(T* ptr) {}

template<>
void ProcessPointer(void* ptr) = delete;

class C {
public:
    template<typename T>
    void ProcessPointer(T* ptr) {}
};


template<>
void C::ProcessPointer(void* ptr) = delete;

int main() {
    // A a, a1;
    // A a2(a);
    // a = a1;

    // B b, b1;
    // B b2(b);
    // b = b1;

    if (isLucky(100));
    // if (isLucky('a'));
    // if (isLucky(true));

    return 0;
}   